package com.train.webadmin.app.dao;

import com.train.common.core.base.dao.BaseDaoMapper;
import com.train.webadmin.app.model.StudentInfo;
import com.train.webadmin.app.model.ClassInfo;
import org.apache.ibatis.annotations.Param;

import java.util.*;

/**
 * 学生列表数据操作访问接口。
 *
 * @author xulei
 * @date 2025-03-07
 */
public interface StudentInfoMapper extends BaseDaoMapper<StudentInfo> {

    /**
     * 批量插入对象列表。
     *
     * @param studentInfoList 新增对象列表。
     */
    void insertList(List<StudentInfo> studentInfoList);

    /**
     * 获取过滤后的对象列表。
     *
     * @param studentInfoFilter 主表过滤对象。
     * @param orderBy 排序字符串，order by从句的参数。
     * @return 对象列表。
     */
    List<StudentInfo> getStudentInfoList(
            @Param("studentInfoFilter") StudentInfo studentInfoFilter, @Param("orderBy") String orderBy);

    /**
     * 获取过滤后的对象列表。同时支持基于一对一从表字段的过滤条件。
     *
     * @param studentInfoFilter 主表过滤对象。
     * @param classInfoFilter 一对一从表过滤对象。
     * @param orderBy 排序字符串，order by从句的参数。
     * @return 对象列表。
     */
    List<StudentInfo> getStudentInfoListEx(
            @Param("studentInfoFilter") StudentInfo studentInfoFilter,
            @Param("classInfoFilter") ClassInfo classInfoFilter,
            @Param("orderBy") String orderBy);

    StudentInfo getStudentInfoByUserId(@Param("userId") Long id);

    List<StudentInfo> getStudentInfoByClassId(@Param("classId") Long classId);

    List<StudentInfo> getStudentInfoListByCreateUserId(@Param("createUserId") Long createUserId);

    List<StudentInfo> getStudentInfoByOfficerId(@Param("officerId") Long officerId);

    List<StudentInfo> getStudentScore(
            @Param("studentInfoFilter") StudentInfo studentInfoFilter,
            @Param("orderBy") String orderBy);
}
